//前端路由 本来打算写成一个函数，但路由对象只需要全局存在一个即可 并没有发现需要多个对象存在的场景
var route=(function(){
	var p={
		intes:[]
	};
	function use(fn){
		p.intes.push(fn);
	}
	function hashchange(path){
		var req={path:path},hlen=p.intes.length;
		/*
			执行拦截器链
			i 当前拦截器的索引
			ignore 需要忽略的拦截器
		*/
		!function intec(i,ignore){
			if(i>=hlen){
				return;
			}
			if(i===ignore){
				intec(i+1);
				return;
			}
			var next=util.onefn(function(start){
				if(start!=null){
					intec(start,i)
					return;
				}
				intec(i+1);
			});
			req.next=next;
			p.intes[i](req,next);
		}(0);
	}
	function to(path){
		window.location.hash=path;
	}
	function start(){
		window.onhashchange=function(){
			var path=util.getPath(location.href);
			hashchange(path);
		}
		var path=util.getPath(location.href);
		hashchange(path);
	}
	var result={
		start:start,
		use:use,
		to:to,
		mix:mix
	}
	//扩展API
	function mix(obj){
		for(var key in obj){
			result[key]=obj[key];
		}
	}
	return result;
})();